package com.zixue.heima.nio.netty;

import lombok.extern.slf4j.Slf4j;

import java.io.FileInputStream;
import java.io.IOException;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.SimpleFileVisitor;

/**
 * @ClassName : DemoOne
 * @Description : TODO
 * @Author : chunxiong
 * @Date : 2025/4/12 00:21
 * @Version 1.0
 */

@Slf4j
public class DemoOne {
    public static void main(String[] args) {
//        method2();
        method2();
    }

    public static void method1() {
        //为了方便资源释放用java7的 try catch  twr简写
        try (FileChannel channel = new FileInputStream("/Users/chunxiong/Desktop/gitHub/文件读写专用.txt").getChannel()) {
            //读取要缓冲区  BtyeBuffer不能new 用静态方法去得到 allocate划分内存
            ByteBuffer byteBuffer = ByteBuffer.allocate(13);  //超过缓冲区大小就读不到
            //从channel读取数据 ， 写到缓冲区
            channel.read(byteBuffer);
            //打印  1.byteBuffer切换读写模式  flip切换buffer读模式
            byteBuffer.flip();
            while ( byteBuffer.hasRemaining()){ //是否有剩余的数据
                byte b = byteBuffer.get(); //无参  一次读一个字节
                System.out.println((char)b);
            }
        } catch (IOException e) {
        }
    }

    //不能根据文件大小长度来设置缓存区大小， 得分多次读
    public static void method2() {
        //为了方便资源释放用java7的 try catch  twr简写
        try (FileChannel channel = new FileInputStream("/Users/chunxiong/Desktop/gitHub/文件读写专用.txt").getChannel()) {
            //读取要缓冲区  BtyeBuffer不能new 用静态方法去得到 allocate划分内存
            //byteBuffer创建是空的 是写入模式。只能往里面写。比如调用channel.read
            ByteBuffer byteBuffer = ByteBuffer.allocate(10);  //超过缓冲区大小就读不到
            //从channel读取数据 ， 写到缓冲区
            while (true) {
                int read = channel.read(byteBuffer);
                //打印  1.byteBuffer切换读模式  flip切换buffer读模式
                log.debug("字节长度：========{}",read);
                byteBuffer.flip();
                if (read == -1){
                    break;
                }
                while (byteBuffer.hasRemaining()) { //是否有剩余的数据
                    byte b = byteBuffer.get(); //无参  一次读一个字节
                    log.debug("实际字节:{}",(char) b);
                }
                //切换写模式
                byteBuffer.clear();
            }
        } catch (IOException e) {
        }
    }


    //workFIleTree
    public static void workFIleTree() {
        try {
            Files.walkFileTree(Paths.get("/Users/chunxiong/Desktop/gitHub/"),new SimpleFileVisitor<Path>(){

            });
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

}
